Imports System.Data.SqlClient

Public Class cls_config_parametro_

#Region "Variables ..."
    Private str_idparametro As String = ""
    Private str_tab As String = ""
    Private str_grupo As String = ""
    Private str_nombre As String = ""
    Private int_tipo As parametro_tipo = 0
    Private str_valor As String = ""
    Private str_valorpredeterminado As String = ""
    Private str_label As String = ""
    Private str_valores As String = ""
    Private bit_parametrousuario As Boolean = False
    Private bit_visible As Boolean = False
    Private int_tipo2 As parametro_tipo2 = 0
    Private byt_xml As Byte()


    Private obj_parametrousuario As cls_config_parametrousuario_

    Private col_Items As Collections.Generic.List(Of cls_config_parametro_) = Nothing

    Public Enum parametro_tipo As Integer
        int = 0 'Numero entero
        chk = 1 'Check
        col = 2 'Coleccion
        cbo = 3 'ComboBox
        txt = 4 'Cadena de texto
        dec = 5 'Decimal
        dte = 6 'Fecha
        pth = 7 'Path
        ctm = 8 'custom
        fld = 9 'Path Carpeta
        xmlReport = 10 'Path Carpeta
    End Enum

    Public Enum parametro_tipo2 As Integer
        general = 0 'Numero entero
        informes = 1 'Numero entero
    End Enum
#End Region

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idparametro
        End Get
    End Property
    Property idparametro() As String
        Get
            idparametro = str_idparametro
        End Get
        Set(ByVal value As String)
            str_idparametro = value
        End Set
    End Property
    Property tab() As String
        Get
            tab = str_tab
        End Get
        Set(ByVal value As String)
            str_tab = value
        End Set
    End Property
    Property grupo() As String
        Get
            grupo = str_grupo
        End Get
        Set(ByVal value As String)
            str_grupo = value
        End Set
    End Property
    Property nombre() As String
        Get
            nombre = str_nombre
        End Get
        Set(ByVal value As String)
            str_nombre = value
        End Set
    End Property
    Property tipo() As parametro_tipo
        Get
            tipo = int_tipo
        End Get
        Set(ByVal value As parametro_tipo)
            int_tipo = value
        End Set
    End Property
    Property tipo2() As parametro_tipo2
        Get
            tipo2 = int_tipo2
        End Get
        Set(ByVal value As parametro_tipo2)
            int_tipo2 = value
        End Set
    End Property
    Property valor() As String
        Get
            valor = ""
            If Not parametrousuario Then
                valor = str_valor
            Else
                If IsNothing(obj_parametrousuario) Then
                    obj_parametrousuario = New cls_config_parametrousuario_
                    If obj_parametrousuario.BuscarXnombreXidusuario(nombre, UsuarioLOG.idusuario) Then
                        Return obj_parametrousuario.valor
                    End If
                End If
            End If
        End Get
        Set(ByVal value As String)
            If Not parametrousuario Then
                str_valor = value
            Else
                If IsNothing(obj_parametrousuario) Then
                    obj_parametrousuario = New cls_config_parametrousuario_
                    If Not obj_parametrousuario.BuscarXnombreXidusuario(nombre, UsuarioLOG.idusuario) Then
                        obj_parametrousuario = New cls_config_parametrousuario_
                        obj_parametrousuario.idusuario = UsuarioLOG.idusuario
                        obj_parametrousuario.nombre = nombre
                        obj_parametrousuario.idparametro = idparametro
                    End If
                End If
                obj_parametrousuario.valor = value
            End If
        End Set
    End Property
    Property valorpredeterminado() As String
        Get
            valorpredeterminado = str_valorpredeterminado
        End Get
        Set(ByVal value As String)
            str_valorpredeterminado = value
        End Set
    End Property
    Property label() As String
        Get
            label = str_label
        End Get
        Set(ByVal value As String)
            str_label = value
        End Set
    End Property
    Property valores() As String
        Get
            valores = str_valores
        End Get
        Set(ByVal value As String)
            str_valores = value
        End Set
    End Property
    Property parametrousuario As Boolean
        Get
            parametrousuario = bit_parametrousuario
        End Get
        Set(ByVal value As Boolean)
            bit_parametrousuario = value
        End Set
    End Property
    Property visible As Boolean
        Get
            visible = bit_visible
        End Get
        Set(value As Boolean)
            bit_visible = value
        End Set
    End Property
    Property xml() As Byte()
        Get
            xml = byt_xml
        End Get
        Set(ByVal value As Byte())
            byt_xml = value
        End Set
    End Property
    Property Items() As Collections.Generic.List(Of cls_config_parametro_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_config_parametro_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_config_parametro_)
        While obj_Reader.Read()
            Dim Elemento As New cls_config_parametro_
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__idparametro"))) = False Then
                Elemento.idparametro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__idparametro")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tab"))) = False Then
                Elemento.tab = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tab")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__grupo"))) = False Then
                Elemento.grupo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__grupo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__nombre"))) = False Then
                Elemento.nombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__nombre")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo"))) = False Then
                Elemento.tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valor"))) = False Then
                Elemento.valor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valor")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valorpredeterminado"))) = False Then
                Elemento.valorpredeterminado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valorpredeterminado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__label"))) = False Then
                Elemento.label = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__label")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valores"))) = False Then
                Elemento.valores = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valores")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__parametrousuario"))) = False Then
                Elemento.parametrousuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__parametrousuario")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__visible"))) = False Then
                Elemento.visible = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__visible")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo2"))) = False Then
                Elemento.tipo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo2")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__xml"))) = False Then
                Elemento.byt_xml = TryCast((obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__xml"))), Byte())
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__idparametro"))) = False Then
            idparametro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__idparametro")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tab"))) = False Then
            tab = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tab")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__grupo"))) = False Then
            grupo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__grupo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__nombre"))) = False Then
            nombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__nombre")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo"))) = False Then
            tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valor"))) = False Then
            valor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valor")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valorpredeterminado"))) = False Then
            valorpredeterminado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valorpredeterminado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__label"))) = False Then
            label = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__label")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valores"))) = False Then
            valores = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valores")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__parametrousuario"))) = False Then
            parametrousuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__parametrousuario")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__visible"))) = False Then
            visible = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__visible")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo2"))) = False Then
            tipo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__tipo2")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__xml"))) = False Then
            byt_xml = TryCast((obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__xml"))), Byte())
        End If
    End Sub

    Public Sub Modificar(ByRef prm_obj_config_parametro_ As cls_config_parametro_)
        If Not parametrousuario Then
            Dim obj_Conexion As New cls_Conexion
            Try
                obj_Conexion.Conectar()
                With obj_Conexion.obj_SqlCommand
                    .CommandType = CommandType.StoredProcedure
                    .Connection = obj_Conexion.obj_SqlConnection
                    .CommandText = "config_parametro__Modificar"
                    .Parameters.Add("@parametro__tab", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.tab
                    .Parameters.Add("@parametro__grupo", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.grupo
                    .Parameters.Add("@parametro__nombre", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.nombre
                    .Parameters.Add("@parametro__tipo", SqlDbType.Int).Value = prm_obj_config_parametro_.tipo
                    .Parameters.Add("@parametro__valor", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.valor
                    .Parameters.Add("@parametro__valorpredeterminado", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.valorpredeterminado
                    .Parameters.Add("@parametro__label", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.label
                    .Parameters.Add("@parametro__valores", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.valores
                    .Parameters.Add("@parametro__parametrousuario", SqlDbType.Bit).Value = prm_obj_config_parametro_.parametrousuario
                    .Parameters.Add("@parametro__visible", SqlDbType.Bit).Value = prm_obj_config_parametro_.visible
                    .Parameters.Add("@parametro__idparametro", SqlDbType.NVarChar).Value = prm_obj_config_parametro_.idparametro
                    .Parameters.Add("@parametro__tipo2", SqlDbType.Int).Value = prm_obj_config_parametro_.tipo2
                    .Parameters.Add("@parametro__xml", SqlDbType.Xml).Value = IIf(IsNothing(byt_xml), DBNull.Value, byt_xml)
                    .ExecuteNonQuery()
                End With
            Catch ex As SqlClient.SqlException
                Throw New Exception("Error al Modificar el registro de config_parametro_." & Chr(13) & _
               "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
               "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
               "Descripción: " & ex.Message)
            Finally
                obj_Conexion.Desconectar()
                obj_Conexion = Nothing
            End Try
        Else
            If IsNothing(obj_parametrousuario) Then
                obj_parametrousuario = New cls_config_parametrousuario_
            End If
            obj_parametrousuario.idparametro = idparametro
            obj_parametrousuario.nombre = nombre
            obj_parametrousuario.idusuario = UsuarioLOG.idusuario
            If obj_parametrousuario.idparametrousuario = 0 Then
                obj_parametrousuario.Nuevo()
            Else
                obj_parametrousuario.Modificar()
            End If
        End If

    End Sub

    Public Function Buscar(ByVal prm_str_nombre As String) As cls_config_parametro_
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Buscar = Nothing
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__Buscar"
                .Parameters.Add("@parametro__nombre", SqlDbType.NVarChar).Value = prm_str_nombre

            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = Me
            End If
            obj_Reader.Close()
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de config_parametro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
            obj_Reader.Close()
        Catch ex As SqlClient.SqlException
            CargarTodos = False
            Throw New Exception("Error al CargarTodos los registros de config_parametro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function


    Public Function cargarXTabXGrupo(ByVal prm_str_tab As String, ByVal prm_str_grupo As String, ByVal prm_int_tipo2 As parametro_tipo2) As Collections.Generic.List(Of cls_config_parametro_)
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__cargarXTabXGrupo"
                .Parameters.Add("@parametro__tab", SqlDbType.NVarChar).Value = prm_str_tab
                .Parameters.Add("@parametro__grupo", SqlDbType.NVarChar).Value = prm_str_grupo
                .Parameters.Add("@parametro__tipo2", SqlDbType.Int).Value = prm_int_tipo2
                obj_Reader = .ExecuteReader
            End With
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                cargarXTabXGrupo = col_Items
            End If
            obj_Reader.Close()
        Catch ex As Exception
            Throw New Exception("Error al CargarTodos los registro de cuenta." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Tipo de exepcion: " & ex.GetType.ToString & "." & Chr(13) & _
            "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

#Region "Stores de respuestas diferentes"
    Public Function obtener(ByRef prm_str_nombre As String) As String
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__obtener"
                .Parameters.Add("@parametro__nombre", SqlDbType.NVarChar).Value = prm_str_nombre
                obj_Reader = .ExecuteReader
            End With
            If obj_Reader.HasRows Then
                obj_Reader.Read()
                obtener = obj_Reader.GetValue(obj_Reader.GetOrdinal("parametro__valor"))
            Else
                obtener = Nothing
            End If
            obj_Reader.Close()
        Catch ex As Exception
            Throw New Exception("Error al Buscar el registro de cuenta." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Tipo de exepcion: " & ex.GetType.ToString & "." & Chr(13) & _
            "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function tab_(ByVal prm_int_tipo2 As parametro_tipo2) As Collections.Generic.List(Of String)
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__tab_"
                .Parameters.Add("@parametro__tipo2", SqlDbType.Int).Value = prm_int_tipo2
                obj_Reader = .ExecuteReader
            End With
            If obj_Reader.HasRows Then
                tab_ = New Collections.Generic.List(Of String)
                While obj_Reader.Read()
                    tab_.Add(obj_Reader.GetValue(obj_Reader.GetOrdinal("tab")))
                End While
            Else
                tab_ = Nothing
            End If
            obj_Reader.Close()
        Catch ex As Exception
            Throw New Exception("Error al Cargar tab_ los registro de parametro_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Tipo de exepcion: " & ex.GetType.ToString & "." & Chr(13) & _
            "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function grupo_(ByVal prm_str_tab As String, ByVal prm_int_tipo2 As parametro_tipo2) As Collections.Generic.List(Of String)
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__grupo_"
                .Parameters.Add("@tab", SqlDbType.NVarChar).Value = prm_str_tab
                .Parameters.Add("@parametro__tipo2", SqlDbType.Int).Value = prm_int_tipo2
                obj_Reader = .ExecuteReader
            End With
            If obj_Reader.HasRows Then
                grupo_ = New Collections.Generic.List(Of String)
                While obj_Reader.Read()
                    grupo_.Add(obj_Reader.GetValue(obj_Reader.GetOrdinal("grupo")))
                End While
            Else
                grupo_ = Nothing
            End If
            obj_Reader.Close()
        Catch ex As Exception
            Throw New Exception("Error al Cargar grupo_ los registro de parametro_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Tipo de exepcion: " & ex.GetType.ToString & "." & Chr(13) & _
            "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function nombre_(ByVal prm_str_tab As String, ByVal prm_str_grupo As String, ByVal prm_int_tipo2 As parametro_tipo2) As Collections.Generic.List(Of String)
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "config_parametro__nombre_"
                .Parameters.Add("@tab", SqlDbType.NVarChar).Value = prm_str_tab
                .Parameters.Add("@grupo", SqlDbType.NVarChar).Value = prm_str_grupo
                .Parameters.Add("@parametro__tipo2", SqlDbType.Int).Value = prm_int_tipo2
                obj_Reader = .ExecuteReader
            End With
            If obj_Reader.HasRows Then
                nombre_ = New Collections.Generic.List(Of String)
                While obj_Reader.Read()
                    nombre_.Add(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombre")))
                End While
            Else
                nombre_ = Nothing
            End If
            obj_Reader.Close()
        Catch ex As Exception
            Throw New Exception("Error al Cargar nombre_ los registro de parametro_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Tipo de exepcion: " & ex.GetType.ToString & "." & Chr(13) & _
            "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
#End Region
End Class
